<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组交集</title>
</head>
<body>
    <script>
        var arr1 = [1,2,2,3,4,5];
        var arr2 = [2,2,3,4,5,6,7,8];

        // 先选交集
        var interArr = arr1.filter(function(items,index){
            // 判断arr2数组中是否存在items，条件成立时，返回arr2和arr1都有该数据的新数组
            return (arr2.indexOf(items)) !== -1
        });
        console.log(interArr);
        // 去重
        var res = interArr.reduce(function(pre,cur){
            // 第一步判断新空数组中是否存在数据cur，不存在则为-1，添加进pre
            // 添加有push方法和concat方法，push返回最终数组的长度，concat返回合并后的新数组
            if(pre.indexOf(cur) === -1){
                return pre.concat(cur);
            }else{
                return pre
            }
        },[]);  // 参数[]相当于es3的创建新空数组pre用于push存储

        console.log(res);

        /* 链式调用写法 */
        /* var res = arr1.filter(function(items,index){
            return (arr2.indexOf(items)) !== -1
        }).reduce(function(pre,cur){
            return (pre.indexOf(cur) === -1)?pre.concat(cur):pre
            }
        ,[]);
        console.log(res); */
    </script>
</body>
</html>